"""
响应工具模块
提供统一的API响应格式和错误处理函数
"""
from flask import jsonify

def success_response(data=None, message='Success'):
    """
    成功响应
    
    Args:
        data: 响应数据
        message: 响应消息
        
    Returns:
        JSON响应对象
    """
    response = {
        'status': 'success',
        'message': message,
        'data': data
    }
    return jsonify(response)

def error_response(message='Error', code=400):
    """
    错误响应
    
    Args:
        message: 错误消息
        code: HTTP状态码
        
    Returns:
        JSON响应对象
    """
    response = {
        'status': 'error',
        'message': message,
        'data': None
    }
    return jsonify(response), code

def validation_error_response(errors):
    """
    验证错误响应
    
    Args:
        errors: 验证错误列表
        
    Returns:
        JSON响应对象
    """
    response = {
        'status': 'error',
        'message': 'Validation error',
        'data': {
            'errors': errors
        }
    }
    return jsonify(response), 422

def pagination_response(data, page, per_page, total):
    """
    分页响应
    
    Args:
        data: 分页数据
        page: 当前页码
        per_page: 每页数量
        total: 总数量
        
    Returns:
        JSON响应对象
    """
    # 计算总页数
    total_pages = (total + per_page - 1) // per_page
    
    response = {
        'status': 'success',
        'message': 'Success',
        'data': data,
        'pagination': {
            'page': page,
            'per_page': per_page,
            'total': total,
            'total_pages': total_pages,
            'has_next': page < total_pages,
            'has_prev': page > 1
        }
    }
    return jsonify(response)

def unauthorized_response(message='Unauthorized'):
    """
    未授权响应
    
    Args:
        message: 错误消息
        
    Returns:
        JSON响应对象
    """
    return error_response(message, 401)

def forbidden_response(message='Forbidden'):
    """
    禁止访问响应
    
    Args:
        message: 错误消息
        
    Returns:
        JSON响应对象
    """
    return error_response(message, 403)

def not_found_response(message='Resource not found'):
    """
    资源不存在响应
    
    Args:
        message: 错误消息
        
    Returns:
        JSON响应对象
    """
    return error_response(message, 404)

def conflict_response(message='Resource already exists'):
    """
    资源冲突响应
    
    Args:
        message: 错误消息
        
    Returns:
        JSON响应对象
    """
    return error_response(message, 409)

def rate_limit_response(message='Rate limit exceeded'):
    """
    速率限制响应
    
    Args:
        message: 错误消息
        
    Returns:
        JSON响应对象
    """
    return error_response(message, 429)

def server_error_response(message='Internal server error'):
    """
    服务器错误响应
    
    Args:
        message: 错误消息
        
    Returns:
        JSON响应对象
    """
    return error_response(message, 500)

def service_unavailable_response(message='Service unavailable'):
    """
    服务不可用响应
    
    Args:
        message: 错误消息
        
    Returns:
        JSON响应对象
    """
    return error_response(message, 503)

def create_response(status, message, data=None, code=200):
    """
    创建自定义响应
    
    Args:
        status: 响应状态 ('success' 或 'error')
        message: 响应消息
        data: 响应数据
        code: HTTP状态码
        
    Returns:
        JSON响应对象
    """
    response = {
        'status': status,
        'message': message,
        'data': data
    }
    
    if status == 'error':
        return jsonify(response), code
    
    return jsonify(response)

# 导出
__all__ = [
    'success_response',
    'error_response',
    'validation_error_response',
    'pagination_response',
    'unauthorized_response',
    'forbidden_response',
    'not_found_response',
    'conflict_response',
    'rate_limit_response',
    'server_error_response',
    'service_unavailable_response',
    'create_response'
]